#include <stdlib.h>
#include <cstring>
#include <errno.h>
#include <iostream>
using namespace std;

#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <signal.h>

void sigcb(int signal)
{
    cout << "我是一个进程，刚刚获取了一个信号: " << signal << endl;
    sigset_t pending;
    while (1)
    {
        sigpending(&pending);
        for (int i = 1; i <= 31; i++)
        {
            if (sigismember(&(pending), i))
            {
                cout << "1";
            }
            else
            {
                cout << "0";
            }
        }
        cout << endl;
        cout << "—————————————————————————" << endl;
        sleep(1);
    }
    exit(1);
}
int main(int argc, char *argv[])
{
    sigset_t bsig, obsig;
    sigaddset(&bsig, 2);
    sigaddset(&bsig, 40);
    sigprocmask(SIG_BLOCK, &bsig, &obsig);

    sigset_t pending;
    while (1)
    {
        sigpending(&pending);
        for (int i = 1; i <= 31; i++)
        {
            if (sigismember(&(pending), i))
            {
                cout << "1";
            }
            else
            {
                cout << "0";
            }
        }
        cout << endl;
        cout << "—————————————————————————" << endl;
        sleep(1);
    }
    return 0;
}

// void Usage(const std::string& proc)
// {
//     cerr<<"Usage:\n\t"<<proc<<" signal pid"<<endl;
// }

// int cnt=0;

// void sigcb(int signal)
// {
//     cout<<"我是一个进程，刚刚获取了一个信号: "<< signal <<endl;
//     sigset_t pending;
//     while(1)
//     {
//         sigpending(&pending);
//         for(int i=1;i<=31;i++)
//         {
//             if(sigismember(&(pending),i))
//             {
//                 cout<<"1";
//             }
//             else
//             {
//                 cout<<"0";
//             }
//         }
//         cout<<endl;
//         cout<<"—————————————————————————"<<endl;
//         sleep(1);
//     }
//     exit(1);
// }
// int main(int argc,char* argv[])
// {
//     struct sigaction act;
//     act.sa_handler=sigcb;
//     act.sa_flags=0;
//     sigemptyset(&(act.sa_mask));
//     sigaddset(&(act.sa_mask),3);
//     sigaction(2,&act,nullptr);
//     while(1)
//     {
//         cout<<"运行中……"<<endl;
//         sleep(1);
//     }
//     return 0;
// }

// void sigcb(int signal)
// {
//     cout<<"我是一个进程，刚刚获取了一个信号: "<< signal <<endl;
//     exit(1);
// }
// int main(int argc,char* argv[])
// {
//     signal(2,sigcb);
//     while(1)
//     {
//         cout<<"运行中……"<<endl;
//         sleep(1);
//     }
//     return 0;
// }
